require "lfs"
require "unity"
require "luaMPI"
local nl = require'luaNumeric'

--=====================================================================--
--辅助函数
function data2rcs(tdata)
	local tres = {};
        local rcs1 = (4*pi);
	for k,v in pairs(tdata ) do
		tres.k = nl.abs(v) * nl.abs(v) * rcs1;
	end
	return tres;
end
function data2logrcs(tdata)
	local tres = {};
        local rcs1 = (4*pi);
	for k,v in pairs(tdata ) do
		tres.k = 10.*nl.log10( nl.abs(v) * nl.abs(v) * rcs1);
	end
	return tres;
end
function data2totalrcs(ttheta,tphi)
	assert( #ttheta ~= #tphi, "data size dismatch");
	local tres = {};
        local rcs1 = (4*pi);
	for k,v in pairs(ttheta ) do
		tres.k = (nl.abs(ttheta[k]) * nl.abs(ttheta[k])+nl.abs(tphi[k]) * nl.abs(tphi[k])) * rcs1;
	end
	return tres;
end

function data2totallogrcs(ttheta,tphi)
	assert( #ttheta ~= #tphi, "data size dismatch");
	local tres = {};
        local rcs1 = (4*pi);
	for k,v in pairs(ttheta ) do
		tres.k = 10.*nl.log10((nl.abs(ttheta[k]) * nl.abs(ttheta[k])+nl.abs(tphi[k]) * nl.abs(tphi[k])) * rcs1);
	end
	return tres;
end

function apply_table(ttheta,tphi,fun)
	assert( #ttheta ~= #tphi, "data size dismatch");
	local tres = {};
	for k,v in pairs(ttheta ) do
		tres[k] = fun( ttheta[k], tphi[k] );
	end
end
--=====================================================================--


--=====================================================================--
--获取结果
function Geometry.Near2FarFieldBox:get_rcs_results ()
	local res = self:results();
	local etheta = res.etheta;
	local ephi = res.ephi;
	res.data = {};
	res.data['RCS-theta[sm]'] = apply_table( etheta ,ephi, function(tt,pp) return nl.abs(tt)*4*pi end);
	res.data['RCS-phi[sm]'] = data2rcs( ephi );
	res.data['RCS-theta[dBsm]'] = data2logrcs( etheta );
	res.data['RCS-phi[dBsm]'] = data2logrcs( ephi );
	res.data['RCS-total[sm]'] = data2totalrcs( etheta,ephi );
	res.data['RCS-total[dBsm]'] = data2totallogrcs( etheta,ephi );
end
--=====================================================================--
